﻿#ifndef CLIENT_WRITE_SESSION_H
#define CLIENT_WRITE_SESSION_H

#include "writesession.h"
#include "udpackclient.h"

namespace TFTP {
/**
* @brief Single Transfer Session (Write)
*    此类表示单个写入会话，并存储信息关于文件和传输本身。
*/
class ClientWriteSession : public TFTP::WriteSession
{
public:
    /**
    * @brief 构造函数
    * @param T 具有对等数据的TranferInfo
    * @param local 本地文件名
    * @param remote 远程文件名
    * @param trmode 传输模式
    * @note 此库仅支持八位字节传输模式
    */
    ClientWriteSession(TransferInfo t
                       , const QString &local
                       , const QString &remote
                       , TransferMode trmode = Octet);

    /**
    * @brief 构造函数
    * @param T 具有对等数据的TranferInfo
    * @param data   要保存的数据
    * @param remote 远程文件名
    * @param trmode 传输模式
    * @note 此库仅支持八位字节传输模式
    */
    ClientWriteSession(TransferInfo t
                       , QIODevice *data
                       , const QString &remote
                       , TransferMode trmode = Octet);
    ~ClientWriteSession();
protected:
    /**
    * @brief 请求写
    * @param remote 要在远程端使用的文件名
    * @note 此函数向服务器发送RRQ以启动传输。RRQ格式：
    <pre>
      2 bytes    string   1 byte     string   1 byte
      -----------------------------------------------
      RRQ|  01 |  Filename  |   0  |TransferMode| 0  |
      -----------------------------------------------
    </pre>
    */
    void sendRequest(const QString &remote);
};

};

#endif
